package org.dromara.easyes.core.kernel;

import org.dromara.easyes.core.kernel.BaseEsMapper;
import org.dromara.easyes.core.kernel.Wrapper;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.indices.GetIndexResponse;

/**
 * @ProjectName : KnowCore
 * @Package : cn.cdeden.common.elasticsearch.mapper
 * @ClassName : BaseEsMapperPlus
 * @Author : Yu.
 * @Description : // easy-es 升级 BaseEsMapper 这里继承 BaseEsMapperPlus
 * @Date : 2024/12/10 20:01
 * @Version : 1.0
 */
public interface BaseEsMapperPlus<T> {

    /**
     * 获取mapper中的entityClass
     *
     * @return entityClass
     */
    Class<T> getEntityClass();

    /**
     * 是否存在索引
     *
     * @param indexName 索引名称
     * @return 返回是否存在的布尔值
     */
    Boolean existsIndex(String indexName);

    /**
     * 获取当前索引信息
     *
     * @return 当前索引信息
     */
    GetIndexResponse getIndex();

    /**
     * 获取指定索引信息
     *
     * @param indexName 指定索引名
     * @return 指定索引信息
     */
    GetIndexResponse getIndex(String indexName);

    /**
     * 创建索引,根据当前mapper对应实体类信息及其注解配置生成索引信息
     *
     * @return 是否创建成功
     */
    Boolean createIndex();

    /**
     * 创建索引,根据当前mapper对应实体类信息及其注解配置生成索引信息 可指定索引名进行创建 适用于定时任务按日期创建索引场景
     *
     * @param indexName 指定的索引名,会覆盖注解上指定的索引名
     * @return 是否创建成功
     */
    Boolean createIndex(String indexName);

    /**
     * 创建索引
     *
     * @param wrapper 条件
     * @return 是否成功
     */
    Boolean createIndex(Wrapper<T> wrapper);



    /**
     *  插入管线 数据
     * @author Yu.
     * @Date 2024/12/10 20:08
     * @param entity 实体对象
     * @param pipeline  管线位置
     * @return java.lang.Integer
     **/
    Integer insertPipeline(T entity, String pipeline);


    /**
     * 插入管线 数据
     * @author Yu.
     * @Description // TODO
     * @Date 2024/12/11 10:23
     * @param routing
     * @param parentId
     * @param entity 实体对象
     * @param pipeline 管线位置
     * @param indexNames 索引名
     * @return java.lang.Integer
     **/
    Integer insertPipeline(String routing, String parentId, T entity, String pipeline ,String... indexNames);


}
